home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / PLUS4 / plus4disk2.d64 / ch6.02 sort < prev    next >
Text File  |  2009-01-03  |  10KB  |  107 lines

  1. Ç*NB"1:CH6.02  SORT"
  2. Ç*SP0:LM8:RM62:PL66:TL58
  3. Ç*VP3:HL8:HR72:HD0:├16/+4: ╙╧╥╘╔╬╟                     ,,╙ECTION XX
  4. Ç*HS2:------------------------------------,,----------
  5. Ç*FT0:-----------------------,,----------
  6. Ç*FS3:(C) 1984 ┼LIZABETH ─EAL,,         Ç#
  7. ╙ECTION
  8. Ç*LN2:CN1;╠┼╘ ╘╚┼╥┼ ┬┼ ╧╥─┼╥Ç*LN2:CN0
  9.      ╘HIS SECTION IS ABOUT SORTING. ╙ORTING MEANS PUTTING THINGS IS SEQUENCE. ╔T IS A BORING SUBJECT TO MANY PEOPLE UNTIL A SORT IS NEEDED. ╙ORTING IS SO IMPORTANT THAT VOLUMES HAVE BEEN WRITTEN ON THE SUBJECT. ╘HERE ARE MANY WAYS TO PUT THINGS IN NUMERICAL OR ALPHABETICAL ORDER. ╙OME LARGE COMPUTERS EVEN HAVE A ╙╧╥╘ COMMAND BUILT INTO THE LANGUAGE. ╫E DON'T, SO WE DO IT THE HARD WAY.
  10.      
  11.      ┴PPLICATIONS OF SORTING PROGRAMS ARE OBVIOUS AND AS VARIED AS THE PEOPLE WHO USE THEM. ╙UPPOSE THAT YOU HAVE A BOOK OR A RECORD COLECTION. ┘OU CAN ALPHABETIZE THE LIST BY THE AUTHOR'S NAME OR THE BOOK TITLE. ╔F YOU COLLECT ROCKS, YOU CAN LIST THIR NAMES IN ALPHABETICAL ORDER. ╔F YOU HAPPEN TO BE COLLECTING RARE CHEMICALS, YOU CAN PUT THEM IN ORDER OF THEIR CHEMICAL NAME OR THE ATOMIC WEIGHT. ╔F YOU HAVE A BUNCH OF STUDENTS IN CLASS, YOU CAN ALPHABETIZE THEIR NAMES, OR SORT THEIR TEST RESULTS FROM WORST TO BEST, OR YOU CAN DO BOTH.
  12.      
  13.      ╚OW FAST? ╞ASTER THAN YOU COULD EVER DO BY HAND. ┬UT, SORTS WRITTEN IN ┬ASIC ARE ON THE SLOW SIDE, SO DO NOT EXPECT MIRACLES. ╘HE SORT PRESENTED HERE IS ONE OF THE QUICKER ONES. ╔T IS CALLED A ╙HELL-═ETZNER SORT. ╘HE CODE ITSELF IS AN ADAPTATION OF THE CODE PRESENTED IN ╥AETO ╫EST'S FAMOUS BOOK ABOUT THE ╨┼╘ COMPUTER. ═Y ADAPTATION IS SIMPLY FOR THE PURPOSE OF MAKING IT A SUBSCRIPT OR A POINTER SORT, TO SPEED THINGS UP A LITTLE MORE AND TO PERMIT MULTIPLE ITEMS PER RECORD. "╥ECORD" IS A BUZZWORD. ╔T MEANS SEVERAL PIECES OF INFORMATION BELONGING TO THE SAME SUBJECT. ╞OR INSTANCE, STUDENT'S NAME, HIS CLASS ASSIGNMENT, SEAT NUMBER AND MATH GRADES BELONG TOGETHER IN ONE RECORD. ╘HE PARTS OF ONE RECORD ARE OFTEN CALLED "FIELDS", HENCE A RECORD CAN BE MADE UP OF ONE OR MORE FIELDS.
  14.  
  15. // PRG: SM SORT //
  16.  
  17. Ç*FP10
  18. ***  ╓┴╥╔┴┬╠┼╙ ╔╬ ╘╚┼ ═┴╔╬ ╨╥╧╟╥┴═, LINES 30-90
  19.  
  20. ╥,╬  NUMBER OF RECORDS
  21. ╞    NUMBER OF FIELDS PER RECORD
  22. ╓$() CONTENTS OF RECORDS
  23.      ╓$(╩,╦) UNSORTED LIST
  24.      ╓$(╨(╩),╦) SORTED LIST
  25. ╨()  TABLE OF POINTERS
  26. ╞╠$  KEYBOARD INPUT OF FIELD NUMBER TO SORT
  27. ╞╠   SAME THING IN NUMERIC FORM
  28.  
  29. Ç*FP5
  30. ***  ╓┴╥╔┴┬╠┼╙ ╔╬ ╘╚┼ ╙╧╥╘╔╬╟ ╙╒┬╥╧╒╘╔╬┼, LINES 8000-8070
  31.  
  32. ═,╔,╩,╠  POSITION OF RECORD IN A LIST,
  33.          RELATED TO ╬
  34. ╘        TEMPORARY PLACE TO HOLD VALUES
  35.  
  36. ***  ╔╬╙╘╥╒├╘╔╧╬╙  ***
  37.  
  38.      ╠INE 8050 MAY BE A BIT DIFFICULT TO READ SINCE THERE ARE NO SPACES SEPARATING KEYWORDS. ╙ORRY ABOUT IT. ╘HIS LINE DOES A LOT OF WORK AND THERE JUST ISN'T ENOUGH ROOM FOR SPACES, WHICH ARE ONLY DECORATIVE. ╘HEY HAD TO GO.
  39.  
  40.      ╔╬╨╒╘ STATEMENT IN LINE 56 CONTAINS SEVERAL FUNNY GRAPHICS. ╚ERE IS WHAT YOU SHOULD TYPE: A QUOTE, 3 SPACES, A STAR, 3 CURSOR-LEFT CHARACTERS, CLOSING QUOTE, A SEMICOLON AND ALL THE REST. ╘HIS IS A COMMON FORM OF INPUT ON ├OMMODORE COMPUTERS. ╘HAT STAR PERMITS YOU TO GET OUT OF THE ╔╬╨╒╘ LOOP. ╔F YOU OVERTYPE THE STAR WITH YOUR OWN INPUT (SUCH AS NUMBER ONE, MEANING SORT FIELD 1, PLEASE) IT WILL WORK FINE. ╔F YOU TYPE A NUMBER OTHER THAN 1 TO 3 THE PROGRAM WILL ASK YOU TO REPEAT THE ╔╬╨╒╘.
  41.  
  42.      ╚ERE ARE TWO EXAMPLES OF SORTING RECORDS WHICH DEAL WITH DESCRIPTIONS OF TOWNS: FIELD 1 SORT (TOWNSHIP NAME) AND FIELD 3 SORT (ACRES DEVOTED TO PUBLIC PARKS):
  43.  
  44. // PIC: SM SORT1 //    // PIC: SM SORT3 //
  45.      
  46.      ╘HE PROGRAM ASKS WHICH FIELD TO SORT, BY FLASHING A STAR. ╘YPE A NUMBER RIGHT OVER THE STAR AND PUSH ╥┼╘╒╥╬. ┴S EACH TOWN HAS 3 POSSIBLE FIELDS (ITS NAME AND TWO VALUES), YOU MAY PICK ANY OF 1, 2 OR 3. ╔N A FEW SECONDS THE SCREEN PRINTS THE SORTED OUTPUT AND PERMITS YOU TO SORT AGAIN ON ANOTHER FIELD. ╩UST PRESS ╥┼╘╒╥╬ OVER THE STAR WHEN YOU'VE HAD ENOUGH SORTING FOR THE DAY.
  47.  
  48. ***  ─┼╘┴╔╠╙  ***
  49.  
  50.      ╠INE 50 READS THE RECORDS FROM ─┴╘┴ LINES; IT READS ╞ FIELDS PER RECORD, CREATING A TABLE ╥-LONG AND ╞-WIDE. ╠INES 56-57 ASK YOU WHICH FIELD TO SORT, AND IF YOU ANSWER NOTHING THE QUIT. ╧THERWISE ╞╠ IS GIVEN THE FIELD NUMBER VALUE. ╠INE 60 PREPARES A LIST OF, SO CALLED, POINTERS. ╘HE LIST IS IN THE ╨-ARRAY. ┴T THE MOMENT EACH ╨ IS EQUAL TO THE RECORD NUMBER, SO THE ORDER IS FROM 1 TO ╥, 10 IN OUR CASE.
  51.  
  52.      ╘HEN THE SORTING ROUTINE IS CALLED. ╧NCE THE SORT IS DONE, LINES 70-80 PRINT OUT THE RECORDS IN THE SORTED ORDER. ╘HE ORIGINAL ORDER HAS BEEN RETAINED. ╔F YOU NEED TO PRINT THE ORIGINAL LIST IN ORIGINAL ORDER, YOU'D PRINT ╓$(RECORD,FIELD). ╔F YOU WISH TO PRINT THE RECORDS IN SORTED ORDER, YOU'D PRINT ╓$(P(),FIELD).
  53.      
  54.      ╘HIS SORT, BY THE WAY, CAN HANDLE ANY AMOUNT OF DATA THAT CAN BE HELD IN THE COMPUTER MEMORY AT ONE TIME, SO IT IS LIMITED TO A CERTAIN EXTENT, BUT THE MEMORY IS VAST, YOU ARE UNLIKELY TO NEED MUCH MORE POWER. ╔F YOU DO, COMMERCIAL PROGRAMS ON THE MARKET MAY BE OF HELP.
  55.  
  56.      ╘HE SORT IS IN A GENERAL SUBROUTINE IN LINES 8000-8070. ╔T NEEDS TO BE GIVEN FOUR ITEMS OF INFORMATION:
  57.  
  58. 1. ╘HE LIST OF ITEMS TO SORT (ARRAY ╓$(*,*) PREPARED IN LINE 50).
  59.    ╥ IS NUMBER OF RECORDS, ╞ IS NUMBER OF FIELDS PER RECORD.
  60. 2. ╞IELD NUMBER ╞╠ TO SORT BY, PREPARED IN LINES 56-57
  61. 3. ╬, THE NUMBER OF RECORDS TO SORT
  62. 4. ┴N ARRAY OF POINTERS ╨(*) TO BE SEQUENTIAL NUMBERS 1 TO ╬.
  63.  
  64.      ╠AST TWO ITEMS ARE PREPARED IN LINE 60, JUST BEFORE CALLING THE SUBROUTINE. ╘HE COMPARING AND SWAPPING IS IN LINE 8050. ┴LL THE REST TELLS THE COMPUTER WHICH VALUES TO LOOK AT. ╫E SORT CHARACTER STRINGS. ╫E SWAP ONLY THEIR INDEXES, THAT IS A POSITION IN THE TABLE, TO CUT THE DATA MOVEMENT TO A MINIMUM. ┴T THE END OF SORT, THE TABLE ITSELF IS INTACT. ╔T IS IN THE SAME ORDER AS IT WAS BEFORE THE SORT.
  65.  
  66.      ╘HE SORT ROUTINE WORKS WITH THE ╨ ARRAY. ╔T DOES NOT EXCHANGE THE RECORDS THEMSELVES. ╥ATHER, IT MAKES A LIST, IN THE ╨ ARRAY, OF THE ORDER IN WHICH THE RECORDS SHOULD BE. ┼XAMPLE: IF THE FIRST ITEM IN THE LIST IS ┬┬┬ AND THE SECOND WERE TO BE ┴┴┴, THE ╨-TABLE WILL NOW HAVE VALUES 2 AND 1, MEANING: ITEM 2 IS FIRST, ITEM 1 IS SECOND.
  67.  
  68. ***  ═╒╠╘╔-╞╔┼╠─ ╞┼┴╘╒╥┼  ***
  69.      
  70.      ┴N IMPORTANT FEATURE OF THIS SORT IS THAT YOU CAN SORT, WHAT IS CALLED, MULTI-FIELD RECORDS. ╬ORMALLY YOUR INFORMATION CAN BE ORGANIZED INTO HUNKS (FIELDS) SUCH AS
  71.  
  72. AUTHOR, TITLE, PUBLISHER
  73.      
  74.      ╫HEN YOU SORT THE AUTHOR FIELD (OR COLUMN IF YOU PREFER), YOU MUST HOLD THE DATA THAT GOES WITH THE AUTHOR TOGETHER. ┘OU CANNOT MIX AUTHOR FROM RECORD ONE WITH A TITLE FROM THE FIFTEENTH RECORD ON THE LIST. ╘HIS IS ONE OTHER REASON WHY A POINTER SORT IS USED, OTHERWISE WE WOULD NEED AS MANY LINES SIMILAR TO NUMBER 8050 AS THERE ARE ENTRIES PER ─┴╘┴ LINE, NOT AN ELEGANT THING TO DO.
  75.      
  76.      ╧NE THING THIS ROUTINE DOESN'T DO, BY THE WAY, IS SUBSORT: ONCE YOU HAVE SORTED ONE FIELD, YOU MAY NEED FURTHER SORTS TO SUBDIVIDE THE DATA. ╞OR THIS YOU'D NEED SOME OTHER ROUTINE, MOST LIKELY A COMMERCIAL PRODUCT, WRITTEN IN MACHINE CODE, AS IT REQUIRES MUCH MORE DATA MANIPULATION AND TENDS TO GET SLUGGISH IN ┬ASIC.
  77.  
  78. ***  ╨╥╧╩┼├╘╙  ***
  79.      
  80.      ╘HE PROGRAM DOESN'T CARE WHAT YOU PUT IN ─┴╘┴ LINES, SO LONG AS YOU OBSERVE SOME COMMON SENSE RULES: IF A NAME OF A BOOK OR WHATEVER HAS A COMMA OR A COLON IN IT, ENCLOSE THE WHOLE THING IN QUOTES. ╨AD THE NUMBERS WITH ZEROS TO THE LEFT, OTHERWISE THE CHARACTER STRING SORT WILL GIVE YOU STRANGE RESULTS (TRY IT, 15 MAY COME OUT AS SMALLER THAN 2). ╔F YOU HAVE NEGATIVE NUMBERS, EITHER ADD A CONSTANT, OR REWRITE THIS CODE TO HANDLE THE VALUES AS VALUES, OTHERWISE THE COMPUTER WILL SORT ALL THE NEGATIVE NUMBERS AS SMALLER THAN THE POSITIVE ONES. ┴ BUG IN THE COMPUTER? ╬O, LIKELY A BUG IN THE ┴╙├╔╔ STANDARD.
  81.  
  82.      ╬EEDLESS TO SAY, YOU ARE NOT LIMITED TO DATA PLACED IN ─┴╘┴ LINES. ┘OU CAN LEARN ABOUT USING TAPE OR DISK FILES AND HOLD YOUR DATA THERE. ┘OU CAN LEARN TO READ IN SUCH DATA INTO THE COMPUTER FOR SORTING (OR TABULATIONS, OR WHATEVER).
  83.      
  84. ***  ╫╚┴╘'╙ ╔╬╓╧╠╓┼─ ╔╬ ╙╧╥╘╔╬╟?  ***
  85.      
  86.      ╠INE 8050 IS THE KEY TO THE SORT ROUTINE. ╔T COMPARES VALUES AND SWAPS THEIR POSITIONS WHEN NEEDED. ╔F YOU HAVE NEVER SORTED THINGS BEFORE, TRY THIS: TAKE THREE INDEX CARDS NUMBERED 1,2 AND 3. ═IX THEM UP AND PUT THEM IN ORDER AGAIN. ╫ATCH YOUR OWN STEPS TO SEE WHAT'S INVOLVED. ┴T SOME POINT YOU WILL NEED TO MAKE ROOM FOR AND TO SWAP THE CARDS' POSITIONS. ╔F YOU KNOW HOW TO SWAP TWO VALUES IN COMPUTER'S MEMORY, GO AHEAD TO THE NEXT SECTION. ╧THERWISE READ ON.
  87.  
  88.      ╙WAPPING IS GOOD FUN ONCE YOU GET THE HANG OF IT. ╠ET'S TRY A COMMON PITFALL. ╔F WE WANT TO EXCHANGE PLACES OF ┴ AND ┬, WE CAN'T SAY ┴=┬ : ┬=┴ MUCH AS THAT'S EXACTLY WHAT WE THINK. ╔T WON'T WORK EVEN THOUGH THE THINKING PART IS IMPECCABLE. ╘RY IT:
  89.  
  90. ┴=10:┬=5:┴=┬:┬=┴:╨╥╔╬╘ ┴;┬;    AND PUSH ╥┼╘╒╥╬
  91.  
  92. ─ID IT PRINT "5  10"?  ┘UUCH!
  93.  
  94.      ╫HAT HAPPENS IN THE COMPUTER IS THAT ┬ GETS COPIED INTO ┴ IN THE FIRST PART, THEN ┴ WHICH IS NOW THE SAME AS ┬ GETS COPIED INTO ┬ AND WE HAVE A MESS, SINCE WE LOST ┴ ON THE WAY. ╬OT EXACTLY WHAT WE HAD IN MIND. ┬UT THE COMPUTER DIDN'T MIND. ╔T ALWAYS DOES WHAT YOU TELL IT TO DO. ╨RECISELY WHAT YOU TELL IT. ┴ND THAT IS  THE PROBLEM. ┴ FRESH APPROACH IS NEEDED.
  95.  
  96.      ╘HE KITCHEN IS A GREAT PLACE FOR SCIENTIFIC INSIGHTS. ╘AKE THE BOOK TO THE KITCHEN TO HAVE SOME FUN WITH VARIABLE SWAPPING. ┴ VARIABLE ┴ OR ┬ IN COMPUTER-TALK IS LIKE A GLASS HOLDING SOME AMOUNT OF WATER. ╙O TAKE TWO GLASSES OF THE SAME SIZE AND FILL THEM WITH WATER.
  97.  
  98.      ╔MPORTANT INSTRUCTIONS: ╨OUR ALL OF THE WATER FROM GLASS ┴ TO GLASS ┬. ╘HEN POUR ALL OF THE WATER FROM GLASS ┬ TO GLASS ┴.
  99.  
  100.      ╫HAT? ╔T WON'T WORK? ┘OU CAN'T POUR WATER FROM GLASS ┬ TO GLASS ┴? ╟LASS ┴ IS FULL ALREADY? ... LIKE ╔ SAID, THE KITCHEN IS A GOOD PLACE TO LEARN THINGS. ├OULD YOU DO THE ┴-┬ WATER SWAPPING IF YOU HAD A THIRD GLASS, ├ ? ╘HAT'S IT. ╘HE WHOLE THEORY OF SWAPPING VARIABLES IS UNDER YOUR COMMAND. ╬OW WE'RE REALLY READY TO TALK TO THE COMPUTER:
  101.  
  102. ┴=10:┬=5:├=┬:┬=┴:┴=├:╨╥╔╬╘ ┴;┬;
  103.  
  104.      DOES THE JOB. ┴ AND ┬ HAVE SWAPPED POSITIONS, ┴ IS NOW 5 AND ┬ IS NOW 10, PRECISELY WHAT WE NEED.
  105.  
  106.      ├OMPARING AND SWAPPING IS THE BASIS FOR SORTING, AND YOU NOW KNOW BOTH. ╔T IS AS SIMPLE AS THE LINE ABOVE WHEN TWO VALUES ARE INVOLVED. ╫HEN THERE IS A WHOLE, LONG LIST TO SORT NOT MUCH CHANGES, THE WHOLE LIST IS COMPARED AND SWAPPED AS NEEDED. ╫HAT IS COMPARED WITH WHAT IS OUTSIDE THE SCOPE OF THIS SECTION, BUT LET ME JUST SAY, THAT THERE HAVE BEEN CLEVER TRICKS DEVELOPED BY VARIOUS PEOPLE, IN ORDER TO MINIMIZE THE NUMBER OF SWAPS. ╘HE PROGRAM ABOVE IS FAIRLY GOOD IN THAT RESPECT.
  107.